package Classic;
/*
输入n，
穷举集合{1,2,...n}的子集
思路：从集合数0个元素的集合开始枚举，枚举完以后，递归枚举，集合数加1，直到集合数到n为止
 */

public class Demo005 {
    public static void run(){
        int n=4;
        int[] newArr=new int[n];
        subset(n,newArr,0);
    }

    public static void subset(int n,int [] newArr,int index){
        //输出子集
        if(index==0)
            System.out.println("空集");
        else {
            for(int i=0;i<index;i++){
                System.out.print(newArr[i]+" ");
            }
            System.out.println();
        }
        //递归构造集合数为index+1的子集
        int start= index==0?1:newArr[index-1]+1;//循环的起始数
        for(int j=start;j<=n;j++){
            newArr[index]=j;
            subset(n,newArr,index+1);
        }
    }
}
